]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dialog: Fix setting buttons as initial key focus
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 28 Sep 2017 10:38:33 +0000 (12:38 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Wed, 4 Oct 2017 16:12:27 +0000 (18:12 +0200)
Commit 1c7a3ee61b1892 broke setting the initial key focus for default
buttons added via addButton(). Fix this by allowing the dialog class
to provide a different default widget to ModalDialog than the entire
dialog itself.

https://bugzilla.gnome.org/show_bug.cgi?id=788282

js/ui/dialog.js
js/ui/modalDialog.js

index 3fdc3ef886c64fb3ac827d849abbdb99efeb2b1f..781fe0a97277ceca67de0d4f0e485e38028c7607 100644 (file)
@@ -15,6 +15,7 @@ var Dialog = new Lang.Class({
         this.parent({ layout_manager: new Clutter.BinLayout() });
         this.connect('destroy', Lang.bind(this, this._onDestroy));
 
+        this._initialKeyFocus = null;
         this._pressedKey = null;
         this._buttonKeys = {};
         this._createDialog();
@@ -86,6 +87,10 @@ var Dialog = new Lang.Class({
         return Clutter.EVENT_PROPAGATE;
     },
 
+    get initialKeyFocus() {
+        return this._initialKeyFocus || this;
+    },
+
     addContent: function (actor) {
         this.contentLayout.add (actor, { expand: true });
     },
@@ -116,7 +121,7 @@ var Dialog = new Lang.Class({
         if (isDefault)
             button.add_style_pseudo_class('default');
 
-        if (!this._initialKeyFocusDestroyId)
+        if (this._initialKeyFocus == null || isDefault)
             this._initialKeyFocus = button;
 
         for (let i in keys)
index 1547b89d30d5f3adb750d4fd388f1658aa14c482..0e66e032a28f9daeff0fa65f3683cd1e95a15ece 100644 (file)
@@ -84,7 +84,7 @@ var ModalDialog = new Lang.Class({
         }
 
         global.focus_manager.add_group(this.dialogLayout);
-        this._initialKeyFocus = this.dialogLayout;
+        this._initialKeyFocus = null;
         this._initialKeyFocusDestroyId = 0;
         this._savedKeyFocus = null;
     },
@@ -157,7 +157,7 @@ var ModalDialog = new Lang.Class({
         this._initialKeyFocus = actor;
 
         this._initialKeyFocusDestroyId = actor.connect('destroy', Lang.bind(this, function() {
-            this._initialKeyFocus = this.dialogLayout;
+            this._initialKeyFocus = null;
             this._initialKeyFocusDestroyId = 0;
         }));
     },
@@ -237,7 +237,8 @@ var ModalDialog = new Lang.Class({
             this._savedKeyFocus.grab_key_focus();
             this._savedKeyFocus = null;
         } else {
-            this._initialKeyFocus.grab_key_focus();
+            let focus = this._initialKeyFocus || this.dialogLayout.initialKeyFocus;
+            focus.grab_key_focus();
         }
 
         if (!this._shellReactive)